package sing.rabbit.direct.common;

import org.springframework.amqp.core.MessageProperties;

/**
 *
 * 重写 toString()，使之能在 contentType=application/octet-stream(发送消息为Stream类型)时，打印 Message 中 Body 正常显示 <br>
 *
 * <span style="color:#aa0000"><strong>弃用</strong></span> <br>
 *
 * 因为 <br>
 * 1. 也没太必要。只是 toString 的显示问题 <br>
 * 2. 会遇到 @RabbitListener + @RabbitHandler 的参数类型问题，而原 Message 类不会遇到，<strong>且没发现原因</strong> <br>
 *
 * @author xing
 * @date 2022/9/8 16:41
 */
public class Message extends org.springframework.amqp.core.Message {
    @Override
    public String toString() {
        if (MessageProperties.CONTENT_TYPE_BYTES.equals(super.getMessageProperties().getContentType())) {
            return new String(super.getBody());
        }
        return super.toString();
    }

    public Message(byte[] body) {
        super(body);
    }

    public Message(byte[] body, MessageProperties messageProperties) {
        super(body, messageProperties);
    }

    /**
     * <span style="color:green"><strong>TODO 为什么原来的 Message 不会报错，</strong></span> <br>
     * 解决自定义 Message 接收 String 类型消息报错的问题：<br>
     * Cannot convert from [java.lang.String] to [sing.rabbit.direct.common.Message] for GenericMessage [payload=A Direct Message, headers={xxx}]
     * @param body
     */
    public Message(String body) {
        super(body.getBytes());
    }

}